package net.servir.capacidades.web.controller;

import java.util.Iterator;
import java.util.LinkedList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.Ejecutora;
import net.servir.capacidades.model.Enumerados;
import net.servir.capacidades.model.Sistema;
import net.servir.capacidades.model.SistemaEtapa;
import net.servir.capacidades.model.Test;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.jsp.JspEjecutoraEdicion;
import net.servir.capacidades.model.jsp.JspTestEdicion;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.CensoService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestEdicionController {

	@Autowired
	private CapacidadesService capacidadesService;
	@Autowired
	private CensoService censoService;

	@RequestMapping("/testEdicion.htm")
	public @ModelAttribute("testEdicion")
	JspTestEdicion participanteBusqueda(HttpServletRequest request) {

		// ************************************************************
		// se obtiene el dni de la session activa
		// ************************************************************
		HttpSession session = request.getSession();
		String cod_session = session.getId();

		String dniResponsable = null;
		if (session.getAttribute("dni") != null)
			dniResponsable = session.getAttribute("dni").toString();

		// Obtenemos los datos del Usuario
		Usuario usuario = capacidadesService
				.GetUsuarioIdentificacion(dniResponsable);

		if (usuario == null)
			return null;

		// ************************************************************
		session.setAttribute("OBJ_SC_BUSQ", null);
		session.setAttribute("OBJ_PARTIC_BUSQ", null);
		session.setAttribute("OBJ_RESP_BUSQ", null);

		JspTestEdicion obj = new JspTestEdicion();
		String accion = null;
		Integer idTest = 0;
		Integer idSistema = 10;
		Integer idAmbito = 15;
		Integer idBanco_pregunta = null;
		Integer idExmPerfil = null;
		String descripcion_test = "";
		String fh_inicio = "";
		String fh_fin = "";
		String fec_programacion = "";
		String fec_act = "";
		String valido = "0";
		Test test = new Test();

		// Atributos basico
		if (request.getParameter("idTest") != null
				&& !request.getParameter("idTest").equals(""))
			idTest = Integer.parseInt(request.getParameter("idTest"));

		accion = request.getParameter("accion");

//		if (request.getParameter("idAmbito") != null
//				&& request.getParameter("idAmbito") != ""
//				&& request.getParameter("idAmbito") != "0")
//			idAmbito = Integer.parseInt(request.getParameter("idAmbito"));
//		if (request.getParameter("idSistema") != null)
//			idSistema = Integer.parseInt(request.getParameter("idSistema"));
		if (request.getParameter("idBancoPregunta") != null)
			idBanco_pregunta = Integer.parseInt(request
					.getParameter("idBancoPregunta"));
		if (request.getParameter("fh_inicio") != null)
			fh_inicio = request.getParameter("fh_inicio");
		if (request.getParameter("fh_fin") != null)
			fh_fin = request.getParameter("fh_fin");
		if (request.getParameter("fec_programacion") != null)
			fec_programacion = request.getParameter("fec_programacion");
		if (request.getParameter("valido") != null)
			valido = request.getParameter("valido");
//		if (request.getParameter("idSistema") != null)
//			idSistema = Integer.parseInt(request.getParameter("idSistema"));
		if (request.getParameter("id_exm_perfil") != null)
			idExmPerfil = Integer.parseInt(request
					.getParameter("id_exm_perfil"));
		if (request.getParameter("test") != null)
			descripcion_test = request.getParameter("test");
		if (request.getParameter("id_tipo_prueba")!=null){
			test.setId_tipo_prueba(request.getParameter("id_tipo_prueba"));
		}
		if (request.getParameter("id_sistema_etapa") != null && !request.getParameter("id_sistema_etapa").equals(""))
			obj.setId_sistema_etapa(Integer.parseInt(request
					.getParameter("id_sistema_etapa")));
		
		obj.setSistemas(capacidadesService.ObtenerSistema());
		LinkedList<SistemaEtapa> listaSistemaEtapa = capacidadesService.ObtenerSistemaEtapa((Number)idAmbito);
		obj.setSistemaEtapa(listaSistemaEtapa);
		obj.setBancos(censoService.obtenerBancos());
//		System.out.println("Accion : "+accion);
//		System.out.println("idTest : "+idTest);
		if (accion.equals("INICIO")) {
			if (idTest == 0) {
				test.setTest("");
				test.setValido("0");
				test.setId_test(idTest);
				test.setId_sistema(idSistema);
				test.setId_ambito(idAmbito);
				test.setId_sistema_etapa(obj.getId_sistema_etapa());
			} else {
				test = censoService.getTest(idTest);
				// Set el entorno para la entidad actual
				idSistema = test.getId_sistema().intValue();
				idAmbito = test.getId_ambito().intValue();
				idBanco_pregunta = test.getId_ambito().intValue();
				idExmPerfil = test.getId_exm_perfil().intValue();
				obj.setId_sistema_etapa(test.getId_sistema_etapa());
			}
		} else {
			test.setId_test(idTest);
			test.setId_sistema(idSistema);
			test.setId_ambito(idAmbito);
			test.setId_banco_pregunta(idBanco_pregunta);
			test.setTest(descripcion_test);
			test.setFh_inicio(fh_inicio);
			test.setFh_fin(fh_fin);
			test.setValido(valido);
			test.setFec_programacion(fec_programacion);
			test.setFec_act(fec_act);
			test.setId_exm_perfil(idExmPerfil);
			test.setId_sistema_etapa(obj.getId_sistema_etapa());
		}

		if (idSistema != null && idSistema != 0) {
			Iterator itr = null;
			Sistema s = null;
			itr = obj.getSistemas().iterator();
			if (itr != null) {
				Integer row = 0;
				while (itr.hasNext()) {
					row += 1;
					s = (Sistema) itr.next();
					if (s.getId_sistema().intValue() == idSistema) {
						obj.setAmbitos(capacidadesService
								.ObtenerAmbito(idSistema));
						if (!s.getCon_ambitos().equals("1")) {
							idAmbito = obj.getAmbitos().getFirst()
									.getId_ambito().intValue();
						}
						test.setId_ambito(idAmbito);
					}
				}
			}
			// Cargar perfiles de examenes
			obj.setExmPerfiles(censoService.obtenerExmPerfiles(idSistema));

		}

		if (accion.equals("GRABAR")) {
//			System.out.println("GRABAR");
			idTest = censoService.grabarTest(test);
			test.setId_test(idTest);
		}
		obj.setTest(test);
		return obj;
	}
}
